/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;
import model.Aluno;
import model.Exercicio;
import model.Professor;
import model.Treino;
import org.hibernate.*;
import org.hibernate.criterion.Restrictions;
import util.HibernateUtil;
/**
 *
 * @author Wagner
 */
@ManagedBean(name="login")
@SessionScoped
public class LoginImplementsLoginDAO implements ILoginDAO {
    
    private Aluno aluno;
    private Professor professor;
    private Treino treino;
    private String login;
    private String senha;
    private String ddlPessoa;
    List<SelectItem> selectItem;
    private Session sessao;
    private HttpServletRequest session;
    private List<Exercicio> exercicios;
    
    //<editor-fold defaultstate="collapsed" desc="Geters / Seters">
    public Aluno getAluno(){
        return this.aluno;
    }
    public void setAluno(Aluno aluno){
        this.aluno = aluno;
    }
    public Professor getProfessor(){
        return this.professor;
    }
    public void setProfessor(Professor professor){
        this.professor = professor;
    }
    public Treino getTreino() {
        return treino;
    }
    public void setTreino(Treino treino) {
        this.treino = treino;
    }
    
    public String getDllPessoa(){
        return this.ddlPessoa;
    }
    public void setDllPessoa(String dllpessoa){
        this.ddlPessoa = dllpessoa;
    }
    public String getLogin(){
        return this.login;
    }
    public void setLogin(String login){
        this.login = login;
    }
    public String getSenha(){
        return this.senha;
    }
    public void setSenha(String senha){
        this.senha = senha;
    }
    public List<SelectItem> getSelectItem(){  
        selectItem = new ArrayList<SelectItem>();
        selectItem.add(new SelectItem(1,"--Selecione--"));  
        selectItem.add(new SelectItem(2,"Aluno"));  
        selectItem.add(new SelectItem(3,"Professor"));  
        return selectItem;  
    }
    public List<Exercicio> getExercicios() {
        return exercicios;
    }

    public void setExercicios(List<Exercicio> exercicios) {
        this.exercicios = exercicios;
    }
    
    //</editor-fold>
    
    @Override
    public String loginPessoa() {
        String redirect = "";
        sessao = HibernateUtil.getSession();
        session = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        Transaction tr = sessao.beginTransaction();
        
        if (ddlPessoa.equals("3")) {
            try {
                Criteria q = sessao.createCriteria(Professor.class).add(Restrictions.eq("login", this.login)).add(Restrictions.eq("senha", this.senha));
                
                professor = new Professor();
                professor = ((Professor)q.uniqueResult());

                if (professor.getNome() != null) {
                    session.removeAttribute("Aluno");                    
                    session.getSession().setAttribute("Professor", professor);
                    redirect = "_profePerfil";
                }
                else
                    redirect = "_frmCadProfessor";

            } catch (HibernateException e) {
                redirect = "_frmInsucesso";
            }
            finally{
                sessao.close();
                return redirect;
            }
        }
        else if (ddlPessoa.equals("2")){
            try {
                Criteria q = sessao.createCriteria(Aluno.class).add(Restrictions.eq("login", this.login)).add(Restrictions.eq("senha", this.senha));
                
                aluno = new Aluno();
                aluno = (Aluno)q.uniqueResult();

                if (aluno.getNome() != null) {
                    treino = (Treino)sessao.createCriteria(Treino.class).add(Restrictions.eq("aluno.id", aluno.getId())).uniqueResult();
                    tr.commit();
                    try {
                        exercicios = (List)treino.getExercicios();      
                    } catch (Exception e) {
                    }
                    finally{
                        session.removeAttribute("Professor");                            
                        session.setAttribute("Aluno", aluno);
                        redirect = "_alunoPerfil";
                    }
                }
                else
                    redirect = "_frmCadAluno";

            } catch (HibernateException e) {
                redirect = "_frmInsucesso";
            }
            finally{
                sessao.close();
                return redirect;
            }
        }
        else{
            redirect = "_frmLoginPessoa";
            return redirect;
        }
    }
}
